草庐IT

C++ inline

全部标签

c - 如何从 shell 触发内核模块?

我正在使用Ubuntu和VirtualBox。我正在为我的shell定义一个新命令来输出子进程的一些特征(如兄弟树等)。为了输出这些特性,我创建了一个内核模块并使用了task_struct。我还在我的shell之外测试了我的内核模块并且它可以工作。现在我的问题是如何在我的shell中触发这个内核模块(用C代码)以便加载我的内核模块?我搜索了一下,发现需要用到modprobe或insmod之类的系统调用,但不明白怎么用。我尝试了下面的代码,但没有用:setuid(0);system("/sbin/insmod/.../mymodule.ko");感谢您的帮助。

将 C 变量的内容复制到寄存器 (GCC)

由于我是GCC的新手,我在内联汇编代码中遇到了问题。问题是我不知道如何将C变量(UINT32类型)的内容复制到寄存器eax中。我试过下面的代码:__asm__(//IftheLSBofsrcisa0,use~src.Otherwise,usesrc."mov$src1,%eax;""and$1,%eax;""dec%eax;""xor$src2,%eax;"//Findthenumberofzerosbeforethemostsignificantone."mov$0x3F,%ecx;""bsr%eax,%eax;""cmove%ecx,%eax;""xor$0x1F,%eax;");

将 C 变量的内容复制到寄存器 (GCC)

由于我是GCC的新手,我在内联汇编代码中遇到了问题。问题是我不知道如何将C变量(UINT32类型)的内容复制到寄存器eax中。我试过下面的代码:__asm__(//IftheLSBofsrcisa0,use~src.Otherwise,usesrc."mov$src1,%eax;""and$1,%eax;""dec%eax;""xor$src2,%eax;"//Findthenumberofzerosbeforethemostsignificantone."mov$0x3F,%ecx;""bsr%eax,%eax;""cmove%ecx,%eax;""xor$0x1F,%eax;");

c - Linux中共享内存中的多个链接列表

我正在使用C语言和Linux作为平台。我想在多个进程中共享多个结构,这些结构有链接列表的头部(这些列表也应该共享)和指向彼此的指针。此数据所需的内存可达1Mb。因为我不能在共享内存中使用指针,因为它们对不同的进程无效。有两种选择:1)要么使用偏移值而不是指针。2)否则,使用不同的共享内存并使用共享内存ID(由shmget返回)而不是指针。由于要共享的内存很大,哪个选项更好?你能建议另一种选择吗?谢谢。 最佳答案 使用偏移值。使用从共享内存区域开始的size_t偏移量(以字符为单位)代替指针。您将需要在访问或操作这些列表的任何地方执行

c - Linux中共享内存中的多个链接列表

我正在使用C语言和Linux作为平台。我想在多个进程中共享多个结构,这些结构有链接列表的头部(这些列表也应该共享)和指向彼此的指针。此数据所需的内存可达1Mb。因为我不能在共享内存中使用指针,因为它们对不同的进程无效。有两种选择:1)要么使用偏移值而不是指针。2)否则,使用不同的共享内存并使用共享内存ID(由shmget返回)而不是指针。由于要共享的内存很大,哪个选项更好?你能建议另一种选择吗?谢谢。 最佳答案 使用偏移值。使用从共享内存区域开始的size_t偏移量(以字符为单位)代替指针。您将需要在访问或操作这些列表的任何地方执行

c - 无需预洗牌即可生成(非常)大的非重复整数序列

背景我有一个我编写的简单媒体客户端/服务器,我想生成一个非显而易见的时间值,我随每个命令从客户端发送到服务器。时间戳将包含相当多的数据(纳秒分辨率,即使由于现代操作系统中定时器采样的限制,它并不真正准确)等。我正在尝试做的(在Linux上,在C中)是生成一对一的n位值序列(假设数据现在存储在128位整数数组元素中)没有重叠/冲突的值。然后,我会将一个伪随机128位值/数字作为“盐”,将其应用于时间戳,然后开始向服务器发送命令,增加预加盐/预散列值。时间戳大小之所以如此之大,是因为时间戳可能必须容纳非常长的持续时间。问题如何使用初始盐值完成这样的序列(非冲突)?Thebestapproa

c - 无需预洗牌即可生成(非常)大的非重复整数序列

背景我有一个我编写的简单媒体客户端/服务器,我想生成一个非显而易见的时间值,我随每个命令从客户端发送到服务器。时间戳将包含相当多的数据(纳秒分辨率,即使由于现代操作系统中定时器采样的限制,它并不真正准确)等。我正在尝试做的(在Linux上,在C中)是生成一对一的n位值序列(假设数据现在存储在128位整数数组元素中)没有重叠/冲突的值。然后,我会将一个伪随机128位值/数字作为“盐”,将其应用于时间戳,然后开始向服务器发送命令,增加预加盐/预散列值。时间戳大小之所以如此之大,是因为时间戳可能必须容纳非常长的持续时间。问题如何使用初始盐值完成这样的序列(非冲突)?Thebestapproa

c - 来自 GCC 内联汇编的系统调用

这个问题在这里已经有了答案:Howtoinvokeasystemcallviasyscallorsysenterininlineassembly?(2个答案)关闭3年前。是否可以使用内联汇编block中的系统调用来编写单个字符?如果是这样,如何?它应该看起来像这样“东西”:__asm____volatile__("movl$1,%%edx\n\t""movl$80,%%ecx\n\t""movl$0,%%ebx\n\t""movl$4,%%eax\n\t""int$0x80\n\t":::"%eax","%ebx","%ecx","%edx");$80在ascii中是“P”,但不返回任

c - 来自 GCC 内联汇编的系统调用

这个问题在这里已经有了答案:Howtoinvokeasystemcallviasyscallorsysenterininlineassembly?(2个答案)关闭3年前。是否可以使用内联汇编block中的系统调用来编写单个字符?如果是这样,如何?它应该看起来像这样“东西”:__asm____volatile__("movl$1,%%edx\n\t""movl$80,%%ecx\n\t""movl$0,%%ebx\n\t""movl$4,%%eax\n\t""int$0x80\n\t":::"%eax","%ebx","%ecx","%edx");$80在ascii中是“P”,但不返回任

c++ - libgcc_s.so 在同一进程中静态和动态链接是否正常?

我的应用引入了许多共享库。有些是用C++编写的,它会引入libstdc++.so,而后者会引入libgcc_s.so。还有一些是用纯C语言编写的,并与-static-libgcc链接。所以现在我有一些libgcc静态链接在多个共享库中,而libstdc++在运行时动态加载其他libgcc。Q1:这个设置会给我带来什么麻烦吗?libgcc是否具有会使这种混合链接出现问题的内部状态,或者它只是内联函数?问题2:为了让我的应用程序在旧版Linux上运行,我应该发布libstdc++.so和libgcc_s.so并在主exe上使用rpath来加载它。这是正确的做法吗?